import ajax from "uni-ajax"
import {
	getAccessToken
} from "./cookie"
import Notify from '@/wxcomponents/vant/notify/notify';

const LOCAL = "http://localhost:4001";
const config = {
	baseURL: `${LOCAL}/api/v1`,
	timeout: 5000,
}
const instance = ajax.create(config) // 创建请求实例
// 添加请求拦截器
instance.interceptors.request.use(
	(config) => {
		if (getAccessToken()) {
			config.headers.Authorization = getAccessToken();
		}
		return config;
	},
	(error) => {
		console.log(error);
		return Promise.reject(error);
	})
// 添加响应拦截器
instance.interceptors.response.use((response) => {
		const {
			statusCode
		} = response;
		const res = response?.data;

		switch (statusCode) {
			case 200: // OK 服务器成功返回用户请求的数据，该操作是幂等的（Idempotent）
				break;
			case 201: // CREATED - [POST/PUT/PATCH] 用户新建或修改数据成功
				break;
			case 202: // Accepted - [*] 表示一个请求已经进入后台排队（异步任务）
				break;
			default:
				break;
		}
		return Promise.resolve(res.data || res);
	}, (error) => {
		// console.log('err:' + JSON.stringify(error.response.statusCode)); // for debug
		let message = '';
		const {
			statusCode,
			data
		} = error.response;
		console.error(data.error);
		switch (statusCode) {
			case 400: //  INVALID REQUEST - [POST/PUT/PATCH]：用户发出的请求有错误，服务器没有进行新建或修改数据的操作，该操作是幂等的。
				message = statusCode + ':发出的请求有错误' + data.error;
				break;
			case 401: // Unauthorized - [*]：表示用户没有权限（令牌、用户名、密码错误）。
				message = statusCode + ':未授权请重新登录' + data.error;
				// store.dispatch('user/logout').then(() => router.push('/login'));
				break;
			case 403: // Forbidden - [*] 表示用户得到授权（与401错误相对），但是访问是被禁止的。
				message = statusCode + ':服务器拒绝访问' + data.error;
				break;
			case 404: // NOT FOUND - [*]：用户发出的请求针对的是不存在的记录，服务器没有进行操作，该操作是幂等的。
				message = statusCode + ':资源未找到' + data.error;
				break;
			case 406: // Not Acceptable - [GET]：用户请求的格式不可得（比如用户请求JSON格式，但是只有XML格式）。
				message = statusCode + ':请求格式错误' + data.error;
				break;
			case 410: //  Gone -[GET]：用户请求的资源被永久删除，且不会再得到的。
				message = statusCode + ':资源已被永久删除' + data.error;
				break;
			case 422: // Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时，发生一个验证错误。
				message = statusCode + ':参数验证错误' + data.error;
				break;
			case 500: //  INTERNAL SERVER ERROR - [*]：服务器发生错误，用户将无法判断发出的请求是否成功。
				message = statusCode + ':服务器内部错误' + data.error;
				break;
			default:
				message = statusCode + ':未知错误';
		}

		Notify({
			message,
			type: 'danger',
			duration: 5 * 1000,
			safeAreaInsetTop: true,
		});

		return Promise.reject(error);
	}

)

export default instance
